package pe.com.pgn.consolidadorventas.servidorcentral.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.apache.log4j.Logger;

public class FechasUtil {

	static Logger logger = Logger.getLogger(FechasUtil.class);

	public static String formatearDateToString(Date fecha){
		SimpleDateFormat formatFecha = new SimpleDateFormat(Constantes.FORMATO_FECHA);
		String rpta = formatFecha.format(fecha);
		return rpta;
	}
	
	public static String formatearDateTimeToString(Date fecha){
		SimpleDateFormat formatFechaHora = new SimpleDateFormat(Constantes.FORMATO_FECHA_HORA);
		String rpta = formatFechaHora.format(fecha);
		return rpta;
	}
	
	public static Date formatearStringToDate(String fecha){
		SimpleDateFormat formatFecha = new SimpleDateFormat(Constantes.FORMATO_FECHA);
		Date d = null;
		try {
			d = formatFecha.parse(fecha);
		} catch (ParseException e) {
			logger.error(e.getMessage());
		}
		return d;
	}
	
	public static Date formatearStringToDateTime(String fecha){
		SimpleDateFormat formatFechaHora = new SimpleDateFormat(Constantes.FORMATO_FECHA_HORA);
		Date d = null;
		try {
			d = formatFechaHora.parse(fecha);
		} catch (ParseException e) {
			logger.error(e.getMessage());
		}
		return d;
	}
	
	public static Date formatearStringToDateTimeAMPM(String fecha){
		SimpleDateFormat formatFechaHoraAMPM = new SimpleDateFormat(Constantes.FORMATO_FECHA_HORA_AM_PM);
		Date d = null;
		try{
			d = formatFechaHoraAMPM.parse(fecha);
		}catch(ParseException e){
			logger.error(e.getMessage());
		}
		return d;
	}
	
	public static String repararAMPMString(String cadena){
		String cad01 = cadena.replaceFirst("a.m.", "am.");
		String cad02 = cad01.replaceFirst("p.m.", "pm.");
		return cad02;
	}
	
	public static String obtenerPeriodoDeFecha(Date fecha){
		SimpleDateFormat formatPeriodoActual = new SimpleDateFormat(Constantes.FORMATO_PERIODO_ACTUAL);
		String rpta = formatPeriodoActual.format(fecha);
		return rpta;
	}
	
	public static int obtenerDiasDiferenciaEntreFechas(String fechaInicio,String fechaFin){
		Date d1 = formatearStringToDate(fechaInicio);
		Date d2 = formatearStringToDate(fechaFin);
		int diferencia = obtenerDiasDiferenciaEntreFechas(d1,d2);
		return diferencia;
	}
	
	public static int obtenerDiasDiferenciaEntreFechas(Date fechaInicio,Date fechaFin){
		GregorianCalendar date1 = new GregorianCalendar();
		GregorianCalendar date2 = new GregorianCalendar();
		date1.setTime(fechaInicio);
		date2.setTime(fechaFin);
		
		int diferencia = -1;
		
		/* COMPROBAMOS SI ESTAMOS EN EL MISMO ANYO */
        if (date1.get(Calendar.YEAR) == date2.get(Calendar.YEAR)) {
        	diferencia = date2.get(Calendar.DAY_OF_YEAR) - date1.get(Calendar.DAY_OF_YEAR);
        } else {
            /* SI ESTAMOS EN DISTINTO ANYO COMPROBAMOS QUE EL ANYO DEL DATEINI NO SEA BISIESTO
             * SI ES BISIESTO SON 366 DIAS EL ANYO
             * SINO SON 365
             */
            int diasAnyo = date1.isLeapYear(date1.get(Calendar.YEAR)) ? 366 : 365;

            /* CALCULAMOS EL RANGO DE ANYOS */
            int rangoAnyos = date2.get(Calendar.YEAR) - date1.get(Calendar.YEAR);

            /* CALCULAMOS EL RANGO DE DIAS QUE HAY */
            diferencia = (rangoAnyos * diasAnyo) + (date2.get(Calendar.DAY_OF_YEAR) - date1.get(Calendar.DAY_OF_YEAR));

        }
		return diferencia;
	}

}
